#include <iostream>
using namespace std;

// class TripleInOne {
// private:
//     int* stack;
//     int stack_size;
//     int stack_num[3] = {0};
// public:
//     TripleInOne(int stackSize) {
//         stack = (int*)malloc(sizeof(int)*3*stackSize);
//         stack_size = stackSize;
//     }
    
//     void push(int stackNum, int value) {
//         if(stack_num[stackNum] < stack_size)
//         {
//             for(int i = stackNum * stack_size + stack_num[stackNum] - 1; i >= stackNum * stack_size; --i)
//             {
//                 int j = i + 1;
//                 stack[j] = stack[i];
//             }
//             stack[stackNum*stack_size] = value;
//             ++stack_num[stackNum];
//         }
//     }
    
//     int pop(int stackNum) {
 
//         if(stack_num[stackNum] > 0)
//         {
//             int temp = stack[stackNum * stack_size];
//             for(int i = stackNum * stack_size; i < stackNum * stack_size + stack_num[stackNum]; ++i)
//             {
//                 int j = i + 1;
//                 stack[i] = stack[j];
//             }
//             --stack_num[stackNum];
//             return temp;
//         }
//         return -1;

//     }
    
//     int peek(int stackNum) {
//         if(stack_num[stackNum] > 0)
//         {
//             return stack[stackNum * stack_size];
//         }
//         return -1;
//     }
    
//     bool isEmpty(int stackNum) {
//         if(stack_num[stackNum] > 0) return false;
//         return true;
//     }
// };

class TripleInOne {
public:
    int *stack;
    int top[3] = {0};
    int stackSize;
    TripleInOne(int stackSize):stackSize(stackSize) {
        stack = new int[stackSize*3];
    }
    
    void push(int stackNum, int value) {
        if(top[stackNum] < stackSize)
            stack[stackSize*stackNum + top[stackNum]++]=value;
    }
    
    int pop(int stackNum) {
        if(top[stackNum] <= 0)
            return -1;
        else
            return stack[stackSize*stackNum + (--top[stackNum])];
    }
    
    int peek(int stackNum) {
        if(top[stackNum] <= 0)
            return -1;
        else
            return stack[stackSize*stackNum + (top[stackNum]-1)];
    }
    
    bool isEmpty(int stackNum) {
        return top[stackNum]==0;
    }
};


int main()
{
    TripleInOne t(9);
    return 0;
}